package common

import (
	log "github.com/sirupsen/logrus"
	"google.golang.org/protobuf/encoding/protojson"
	"google.golang.org/protobuf/proto"
	"usbipproxy/pb"
)

const (
	TypePb   = 1
	TypeJson = 2
)

func Unmarshal(msg []byte) (*pb.ProxyMsg, int, error) {
	signalMsg := pb.ProxyMsg{}
	err := proto.Unmarshal(msg, &signalMsg)
	typ := TypePb
	if err != nil {
		//看是不是json格式的
		err = protojson.Unmarshal(msg, &signalMsg)
		typ = TypeJson
	}
	return &signalMsg, typ, err
}

func Marshal(m *pb.ProxyMsg, typ int) ([]byte, error) {
	if typ == TypePb {
		data, err := proto.Marshal(m)
		if err != nil {
			log.Errorf("marshal msg failed. msg: %+v err:%v", m, err)
		}

		return data, err
	}

	return protojson.Marshal(m)
}

func UnmarshalByType(typ int, msg []byte) (*pb.ProxyMsg, error) {
	signalMsg := pb.ProxyMsg{}
	if typ == TypePb {
		err := proto.Unmarshal(msg, &signalMsg)
		return &signalMsg, err
	}

	err := protojson.Unmarshal(msg, &signalMsg)
	return &signalMsg, err
}

func SetBaseReqId(msg *pb.ProxyMsg, reqId string) {
	if msg.GetBase() == nil {
		return
	}

	msg.Base.ReqId = reqId
}
